package fybug.nulll.pdstream.WR.Parsing.Source.Partition;
import com.sun.istack.internal.NotNull;

import java.io.Serializable;

import fybug.nulll.pdfunctionlibrary.Util.DataContainer;
/**
 * <h2>分割器超类.</h2>
 * <pre>
 * 检查传入的数据是否含有分隔符,并返回他的长度和位置
 * 返回的标识交由上层处理
 * 分隔符不一定只有一个
 * </pre>
 *
 * @author fybug
 * @version 0.0.7
 * @see Serializable
 * @see DataContainer
 * @since JDK 1.8
 */
@SuppressWarnings( "All" )
abstract
class ParsingAbstractPartition extends DataContainer<int[]> implements Serializable {
    private static final long serialVersionUID = -3521801638614637192L;

    /*
     * Size
     */

    /**
     * <p>分割标识符长度.</p>
     * <pre>
     * <b>标识解析符</b> 的长度,检查时建议 <b>传入该长度</b> 的数据
     * 如果返回{@code -1} 则为无分割符
     * </pre>
     */
    public abstract
    int lenght();

    /**
     * <p>最大缓存长度.</p>
     * <p>缓存到该长度 <b>无论是否检测到分割符</b> 视为分割完成</p>
     *
     * @return 最大长度, 返回{@code -1} 为没有限制
     */
    public abstract
    int size();

    /*
     * Check
     */

    /**
     * <p>检测分割符.</p>
     * <pre>
     * 检测传回来的数据中是不是含有 <b>分割符</b>
     * 并标出该 <b>分隔符</b> 的长度和位置
     * </pre>
     *
     * @param s 要检查的数据,建议长度和 {@link #lenght()} 一致
     */
    public abstract
    long check(@NotNull final String s);
}
